using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools._IndoorsNetwork
{
    /// <summary>
    /// <para>Generate Floor Transitions</para>
    /// <para>Creates or updates transition line features that connect floors vertically.</para>
    /// <para>创建或更新垂直连接楼层的过渡线要素。</para>
    /// </summary>    
    [DisplayName("Generate Floor Transitions")]
    public class GenerateFloorTransitions : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateFloorTransitions()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_facility_features">
        /// <para>Input Facility Features</para>
        /// <para>The input polygon features representing a facility or facilities. In the Indoors model, this is the Facilities layer. The tool processes only the facilities represented by these features.</para>
        /// <para>输入面要素表示一个或多个设施点。在 Indoors 模型中，这是 Facilities 图层。该工具仅处理这些功能所表示的设施点。</para>
        /// </param>
        /// <param name="_transition_unit_features">
        /// <para>Transition Unit Features</para>
        /// <para>The input polygon features representing the transition spaces in a facility. In the Indoors model, this is the Units layer.</para>
        /// <para>表示设施点中过渡空间的输入面要素。在 Indoors 模型中，这是 Units 图层。</para>
        /// </param>
        /// <param name="_pathway_features">
        /// <para>Pathway Features</para>
        /// <para>The input polyline features representing preliminary pathways. The new transition features will snap to these polyline features. In the Indoors model, this will be the PrelimPathways layer.</para>
        /// <para>输入折线要素表示初步路径。新的过渡要素将与这些折线要素对齐。在 Indoors 模型中，这将是 PrelimPathways 图层。</para>
        /// </param>
        /// <param name="_target_transitions">
        /// <para>Target Transitions</para>
        /// <para>An existing feature class or layer that will be updated with the new transitions. In the Indoors model, this is the PrelimTransitions layer.</para>
        /// <para>将使用新过渡进行更新的现有要素类或图层。在 Indoors 模型中，这是 PrelimTransitions 图层。</para>
        /// </param>
        public GenerateFloorTransitions(object _facility_features, object _transition_unit_features, object _pathway_features, object _target_transitions)
        {
            this._facility_features = _facility_features;
            this._transition_unit_features = _transition_unit_features;
            this._pathway_features = _pathway_features;
            this._target_transitions = _target_transitions;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Generate Floor Transitions";

        public override string CallName => "indoors.GenerateFloorTransitions";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_facility_features, _transition_unit_features, _pathway_features, _target_transitions, _elevator_delay, _delete_existing_transitions.GetGPValue(), _stairway_unit_exp, _elevator_unit_exp, _updated_transitions];

        /// <summary>
        /// <para>Input Facility Features</para>
        /// <para>The input polygon features representing a facility or facilities. In the Indoors model, this is the Facilities layer. The tool processes only the facilities represented by these features.</para>
        /// <para>输入面要素表示一个或多个设施点。在 Indoors 模型中，这是 Facilities 图层。该工具仅处理这些功能所表示的设施点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Facility Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _facility_features { get; set; }


        /// <summary>
        /// <para>Transition Unit Features</para>
        /// <para>The input polygon features representing the transition spaces in a facility. In the Indoors model, this is the Units layer.</para>
        /// <para>表示设施点中过渡空间的输入面要素。在 Indoors 模型中，这是 Units 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Transition Unit Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _transition_unit_features { get; set; }


        /// <summary>
        /// <para>Pathway Features</para>
        /// <para>The input polyline features representing preliminary pathways. The new transition features will snap to these polyline features. In the Indoors model, this will be the PrelimPathways layer.</para>
        /// <para>输入折线要素表示初步路径。新的过渡要素将与这些折线要素对齐。在 Indoors 模型中，这将是 PrelimPathways 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pathway Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _pathway_features { get; set; }


        /// <summary>
        /// <para>Target Transitions</para>
        /// <para>An existing feature class or layer that will be updated with the new transitions. In the Indoors model, this is the PrelimTransitions layer.</para>
        /// <para>将使用新过渡进行更新的现有要素类或图层。在 Indoors 模型中，这是 PrelimTransitions 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Transitions")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_transitions { get; set; }


        /// <summary>
        /// <para>Elevator Delay</para>
        /// <para>The average elevator transit time. It is one-half the time in seconds that an elevator passenger can expect to spend waiting to enter and exit the elevator. Using this parameter can improve routing and transit time calculations. The value must be equal to or greater than zero.</para>
        /// <para>电梯的平均运输时间。这是电梯乘客等待进出电梯的时间（以秒为单位）的一半。使用此参数可以改进路由和运输时间的计算。该值必须等于或大于零。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevator Delay")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _elevator_delay { get; set; } = null;


        /// <summary>
        /// <para>Delete Existing Transitions</para>
        /// <para><xdoc>
        ///   <para>Specifies whether existing transition features in selected transition spaces will be deleted before creating new transition features. If this parameter is not used, Updated Transitions will include both existing and newly created transition features.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Existing transition features will be deleted. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Existing transition features will not be deleted.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在创建新过渡要素之前是否删除所选过渡空间中的现有过渡要素。如果未使用此参数，则更新的过渡将包括现有和新创建的过渡要素。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将删除现有过渡要素。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会删除现有过渡要素。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Delete Existing Transitions")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _delete_existing_transitions_value _delete_existing_transitions { get; set; } = _delete_existing_transitions_value._true;

        public enum _delete_existing_transitions_value
        {
            /// <summary>
            /// <para>DELETE_FEATURES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DELETE_FEATURES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DELETE_FEATURES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DELETE_FEATURES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Stairway Unit Expression</para>
        /// <para>An SQL expression used to define which Transition Unit Features values represent step-based transitions, such as stairs and escalators.</para>
        /// <para>一个 SQL 表达式，用于定义哪些过渡单元要素值表示基于步骤的过渡，例如楼梯和自动扶梯。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Stairway Unit Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _stairway_unit_exp { get; set; } = null;


        /// <summary>
        /// <para>Elevator Unit Expression</para>
        /// <para>An SQL expression used to define which Transition Unit Features values represent lift-based transitions, such as elevators.</para>
        /// <para>一个 SQL 表达式，用于定义哪些过渡单元要素值表示基于电梯的过渡，例如电梯。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevator Unit Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _elevator_unit_exp { get; set; } = null;


        /// <summary>
        /// <para>Updated Transitions</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Transitions")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_transitions { get; set; }


        public GenerateFloorTransitions SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}